package jdklearning.concurrent.thread;

import org.apache.commons.lang3.time.StopWatch;


import java.util.concurrent.TimeUnit;

/**
 * @author shenenlu 2021年02月01日 上午10:11:01
 *
 * 为什么要写这个呢？最近把项目布到测试环境之后，之后使用Charles代理到本地，在本地Debug，
 * 在断点调试的时候，其他人在去打开测试环境页面进行点击，页面没改，但是数据一直卡着，
 * 原因是因为我用的是IDEA，IDEA默认断点为堵塞全部线程，所以其他人就卡了。
 *
 * 解决办法：
 *
 * 多线程调试
 *
 * 一般情况下我们调试的时候是在一个线程中的，一步一步往下走。但有时候你会发现在Debug的时候，想发起另外一个请求都无法进行了？
 *
 * 那是因为IDEA在Debug时默认阻塞级别是ALL，会阻塞其它线程，只有在当前调试线程走完时才会走其它线程。可以在View Breakpoints里选择Thread，
 * 如下图，然后点击Make Default设置为默认选项。
 */
public class WriteValueAndDebug {

    public static volatile int i;

    public static void main(String[] args) {
        StopWatch sw = StopWatch.createStarted();

        Thread t = new Thread(() -> {
            try {
                System.out.println(Thread.currentThread().getName());
                Thread.sleep(5000);
                i=5;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        t.start();

//        System.out.println(i);
        System.out.println(Thread.currentThread().getName());
        while ( i == 0 ){
//            System.out.println(i);
        }

        sw.stop();
        System.out.println(sw.getTime(TimeUnit.SECONDS));
    }
}


